<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div style="display: flex">
      <div class="wz"></div>
      <div class="tq" style="margin-left: 8px"></div>
    </div>

    <script>
      //  方案一
      // 假设树形结构如下：
      var treeData = [
        {
          id: 1,
          label: '一级节点',
          status: true, // 初始状态不确定，待计算
          children: [
            {
              id: 2,
              label: '二级节点1',
              status: null, // 或者可以初始化为 true，取决于业务逻辑
              children: [
                { id: 3, label: '三级节点1', status: true },
                { id: 4, label: '三级节点2', status: false }
              ]
            },
            {
              id: 5,
              label: '二级节点2',
              status: null,
              children: [
                { id: 6, label: '三级节点3', status: true },
                { id: 7, label: '三级节点4', status: true }
              ]
            }
          ]
        }
      ]

      // 更新父节点状态的函数
      function updateParentStatus(node) {
        // 如果节点有子节点
        if (node.children && node.children.length > 0) {
          let allChildrenTrue = true
          // 遍历子节点
          node.children.forEach(child => {
            // 先递归更新子节点的子孙节点状态
            updateParentStatus(child)
            // 检查子节点状态是否为false
            if (!child.status) {
              allChildrenTrue = false
            }
          })
          // 如果所有子节点均为true，则更新当前节点为true
          node.status = allChildrenTrue
        }
      }

      // 开始从根节点更新状态
      treeData.forEach(root => updateParentStatus(root))
      console.log('输出更新后的树形数据', treeData) // 输出更新后的树形数据

      // 方案二
      // // 递归函数，用于更新节点状态
      // function updateNodeStatus(node) {
      //   if (node.children) {
      //     let childStatus = node.children.map(item => updateNodeStatus(item))
      //     let childStatusA = childStatus.map(i => i.state)
      //     let childStatusB = childStatus.map(i => i.isAlarm)
      //     if (childStatusA.includes('online')) {
      //       node.state = 'online'
      //     } else {
      //       node.state = 'offline'
      //     }
      //     if (childStatusB.includes(true)) {
      //       node.isAlarm = true
      //     } else {
      //       node.isAlarm = false
      //     }
      //   }
      //   return node
      // }
      // for (let i = 0; i < this.treeOptions.length; i++) {
      //   updateNodeStatus(this.treeOptions[i])
      // }
      // updateNodeStatus(this.treeOptions[0])
    </script>
  </body>
</html>
